package com.atguigu.exam;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 利用反射和File完成以下功能
 利用Class类的forName方法得到File类
 在控制台打印File类的所有构造器
 通过newInstance的方法创建File对象，并创建D：\mynew.txt文件
 * @author xbd
 * @create 2021-06-01 20:14
 */
public class ReflectionFileTest {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException, InstantiationException, ClassNotFoundException {
        // 利用Class类的forName方法得到File类
        Class clazz = Class.forName("java.io.File");
        //获取File的所有构造器并输出
        Constructor[] cons = clazz.getDeclaredConstructors();
        for(Constructor con : cons){
            System.out.println(con);
        }
        //获取File的一个构造器
        Constructor file1 = clazz.getConstructor(String.class);
        //用上面得到构造器创建File对象
        Object instance = file1.newInstance("D:\\mynew.txt");
        //获取File的createNewFile方法
        Method createNewFile = clazz.getMethod("createNewFile");
        //通过createNewFile方法，File对象，完成文件的创建
        createNewFile.invoke(instance);
    }
}
